#include <iostream>
#include <queue>
#include <vector>
#include <memory>

class Node {
public:
    int x, y;
    int g, h, f;
    Node *parent;

    // 构造函数
    Node(int x, int y, Node *parent, int g, int h)
        : x(x), y(y), parent(parent), g(g), h(h), f(g + h) {}

    // 析构函数
    ~Node() {
        std::cout << "Node destroyed." << std::endl;
    }
};

struct CompareNode {
    bool operator()(const Node* a, const Node* b) const {
        return a->f > b->f; // 按 f 的最小值排序
    }
};

int main() {
    std::priority_queue<Node*, std::vector<Node*>, CompareNode> openList;

    // 创建 Node 对象并添加到优先队列
    Node *node1 = new Node(0, 0, nullptr, 0, 5);
    openList.push(node1);
    Node *node2 = new Node(10, 0, nullptr, 0, 10);
    openList.push(node2);
    Node *node3 = new Node(20, 0, nullptr, 0, 20);
    openList.push(node3);

    // 处理优先队列中的节点
    while (!openList.empty()) {
        auto node = openList.top();
        openList.pop(); // 移除顶部元素
        std::cout << node->f << " ";
        // 释放动态分配的 Node 对象
        delete node;
    }
    // 输出: 5 10 20

    return 0;
}